package uml.parser;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.util.ArrayList;

import uml.graph.Aresta;
import uml.graph.Grafo;
import uml.graph.Vertice;


/**
 *
 * @author Paloma
 */
public class Principal {  
    static ParserXMI parser = new ParserXMI();
    static String[] verticesXML =null;   
    static String[][] arestasXML = null;
    static ArrayList<Vertice> listaVertices = new ArrayList<Vertice>();
    static ArrayList<Aresta> listaArestas = new ArrayList<Aresta>();
    private static Grafo grafo;
    private static String saida;
  
    public static void executar() {
     
        //Cria um objeto Grafo 
        grafo = new Grafo();
        //Carrega o arquivo XML
        parser.parser();
        parser.imprimeVetorVertices();
        parser.imprimeVetorArestas();
        
                //verticesXML recebe um conjunto de vertices que são as Tags "Classes" provinientes do XML
        verticesXML=parser.getVetorRotuloVertices(); 
        arestasXML=parser.getVetorArestas();
        
               
        // cria  todos os vertices e os adiciona em uma lista de vertices
        for (int i = 0; i <verticesXML.length; i ++){
            Vertice v = new Vertice(verticesXML[i],i);
            grafo.addVertice(v);
            listaVertices.add(v);
                    
        }
        saida = "Quantidade de associações: "+ parser.getQuantidadeAssociacoes()+"\n\n";
        System.out.println("Quantidade de associações: "+ parser.getQuantidadeAssociacoes());
        //cria todas as arestas e as adiciona no grafo
        int cont=0;
        for(int i = 0; i<parser.getQuantidadeAssociacoes();i++){
           
          Vertice v1,v2,vaux;
          v1=null;
          v2=null;
          vaux=null;
          for(int j=0;j<2;j++){
              //System.out.print(arestasXML[i][j]);
                                
                  if(j==0){
                    
                            //System.out.println("Adicionando o vertice V1 : "+ grafo.existeVertice(listaVertices,arestasXML[i][j]).getRotulo()+"[" +i+ "]" + "["+j+"]");
                            v1=grafo.existeVertice(listaVertices,arestasXML[i][j]);
                            
                       
                  }else if(j==1){
                            
                            //System.out.println("Adicionando o vertice V2 : "+ grafo.existeVertice(listaVertices,arestasXML[i][j]).getRotulo()+"[" +i+ "]" + "["+j+"]");
                            v2=grafo.existeVertice(listaVertices,arestasXML[i][j]);;
                             
                       }   
              
              
          }
         //System.out.println(" _____ Add aresta"); 
         grafo.addAresta(v1, v2);
        }
        // fim da adição de todas as arestas;
        grafo.criarMatrizD();
        grafo.criarMatrizLaplace();
        System.out.println("Quantidade de Verticess:  " + grafo.getQtdVertices());
        saida = saida + "Quantidade de Verticess:  " + grafo.getQtdVertices()+"\n\n";
        //System.out.println(grafo.getQtdVertices());
        System.out.println("Quantidade de arestas: " + grafo.getQtdArestas());
        saida = saida+ "Quantidade de arestas: " + grafo.getQtdArestas()+"\n\n";
        //System.out.println(grafo.getQtdArestas());

        System.out.println("Matriz de Adjacencia: ");
        saida = saida + "Matriz de Adjacencia \n" + grafo.imprimeMatrizAdjacencia(grafo);

        System.out.println("Matriz D: ");
        saida = saida + "Matriz D: \n" + grafo.imprimeMatrizD();

        System.out.println("Matriz de Laplace: ");
        saida = saida + "Matriz de Laplace: \n" + grafo.imprimeMatrizLaplace();
        
        
  }

    public static ParserXMI getParser() {
        return parser;
    }

    public static void setParser(ParserXMI parser) {
        Principal.parser = parser;
    }

    public static String getSaida() {
        return saida;
    }

    public static void setSaida(String saida) {
        Principal.saida = saida;
    }

    public static Grafo getGrafo() {
        return grafo;
    }
    
}
